/**
 * @file: testMazo.cpp 
 * @author: Juan Marcos Gutierrez Ramos
 * @date: JUN-14-2009
 * @desc: Unit test de la clase Mazo
 */
#include <vector>
#include "../Unit--/unit--.h"
#include "../../Mesa.h"
#include "../../Jugador.h"
#include "../../JugadorReal.h"
#include "../../JugadorVirtual.h"
using namespace std;

testSuite(MazoSuite);//crea suite

testCase(Case1, MazoSuite) // prueva void addJugador(Jugador* jugador);
{
    vector<Jugador*> jugadores, jugadoresRetorno;
    Mesa mesa;
    
    Jugador* jugador = new JugadorReal("jugador1");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);
    
    jugador = new JugadorReal("jugador2");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);
    
    jugador = new JugadorReal("jugador3");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);
    
    jugador = new JugadorReal("jugador4");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);
    
    jugador = new JugadorReal("jugador5");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);
    
    jugador = new JugadorReal("jugador6");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);
    
    jugador = new JugadorReal("jugador7");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);
    
    jugador = new JugadorReal("jugador8");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);
    
    jugador = new JugadorReal("jugador9");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);
    
    jugador = new JugadorReal("jugador10");
    mesa.addJugador(jugador);
    jugadores.push_back(jugador);//solo guardo 10 jugadores
    
    jugador = new JugadorReal("jugador11");
    mesa.addJugador(jugador);//provar si acepta 11 jugadores
    
    jugadoresRetorno = mesa.getJugadoresEnMesa();
    assertTrue(10 == jugadoresRetorno.size());//prueva si estan solo 10

    int c = 0;
    vector<Jugador*>::iterator it1;
    vector<Jugador*>::iterator it2 = jugadoresRetorno.begin();
    for(it1=jugadores.begin(); it1!=jugadores.end() ;it1++){
        if((*it1) == (*it2)){
            c++;
            }
        it2++;
        }
    assertTrue(10 == c);//prueva si estan los 10 en el mismo orden
    
    //prueva que un puntero Jugador* puede apuntar a
    //clases derivadas como JugadorReal
    //con esto se implemento el metodo:
    //void Mesa::hacerJugar(vector< pair<Jugador*,int> >::iterator it)
    for(it1=jugadores.begin(); it1!=jugadores.end() ;it1++){
        cout<<(*it1)->getNombre()<<endl;
        }
    for(it1=jugadores.begin(); it1!=jugadores.end() ;it1++){
        JugadorReal* b = dynamic_cast<JugadorReal*>(*it1);
        cout<<b->getNombre()<<endl;
        }
    //system("pause");
}

